{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-04-10T06:50:14.614816Z",
     "start_time": "2025-04-10T06:50:14.158463Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.datasets import fetch_openml\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.metrics import accuracy_score, classification_report, ConfusionMatrixDisplay"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-10T06:50:49.550072Z",
     "start_time": "2025-04-10T06:50:41.705876Z"
    }
   },
   "cell_type": "code",
   "source": [
    "mnist = fetch_openml('mnist_784', version=1, as_frame=False, parser='auto')\n",
    "X, y = mnist.data, mnist.target.astype(np.uint8)  # (70000, 784), 目标值转整数"
   ],
   "id": "163cd3e95f4d8244",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-10T06:51:16.902524Z",
     "start_time": "2025-04-10T06:51:15.510150Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X = X.astype(np.float32) / 255.0  # 先转换为 float32，再归一化  # 归一化到 [0,1]\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
   ],
   "id": "501ba855ed14b378",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-10T06:53:52.215267Z",
     "start_time": "2025-04-10T06:51:44.455941Z"
    }
   },
   "cell_type": "code",
   "source": [
    "svm_model = SVC(kernel='rbf', C=10, gamma=0.01)  # 选择适合的 C 和 gamma\n",
    "# from sklearn.svm import LinearSVC\n",
    "# svm_model = LinearSVC(C=1.0, max_iter=1000, dual=False)  # dual=False 适用于大数据\n",
    "svm_model.fit(X_train, y_train)"
   ],
   "id": "ab640854974bf241",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SVC(C=10, gamma=0.01)"
      ],
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(C=10, gamma=0.01)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;SVC<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.svm.SVC.html\">?<span>Documentation for SVC</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>SVC(C=10, gamma=0.01)</pre></div> </div></div></div></div>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-10T06:57:52.119479Z",
     "start_time": "2025-04-10T06:56:21.065646Z"
    }
   },
   "cell_type": "code",
   "source": "y_pred = svm_model.predict(X_test)",
   "id": "dc241ff7c8fba9bc",
   "outputs": [],
   "execution_count": 5
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-10T06:59:15.066392Z",
     "start_time": "2025-04-10T06:59:15.044749Z"
    }
   },
   "cell_type": "code",
   "source": [
    "accuracy = accuracy_score(y_test, y_pred)\n",
    "print(f\"测试集准确率: {accuracy:.4f}\")"
   ],
   "id": "f6fd22b1fb4daf85",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集准确率: 0.9810\n"
     ]
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-10T06:59:34.099765Z",
     "start_time": "2025-04-10T06:59:34.038962Z"
    }
   },
   "cell_type": "code",
   "source": [
    "print(\"\\n分类报告:\")\n",
    "print(classification_report(y_test, y_pred))"
   ],
   "id": "9e27dc0f0f3d67ca",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "分类报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.99      0.99      0.99      1343\n",
      "           1       0.99      0.99      0.99      1600\n",
      "           2       0.97      0.98      0.98      1380\n",
      "           3       0.98      0.97      0.98      1433\n",
      "           4       0.98      0.98      0.98      1295\n",
      "           5       0.98      0.98      0.98      1273\n",
      "           6       0.99      0.99      0.99      1396\n",
      "           7       0.98      0.98      0.98      1503\n",
      "           8       0.98      0.97      0.97      1357\n",
      "           9       0.98      0.97      0.97      1420\n",
      "\n",
      "    accuracy                           0.98     14000\n",
      "   macro avg       0.98      0.98      0.98     14000\n",
      "weighted avg       0.98      0.98      0.98     14000\n",
      "\n"
     ]
    }
   ],
   "execution_count": 7
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-04-10T06:59:55.594381Z",
     "start_time": "2025-04-10T06:59:53.922181Z"
    }
   },
   "cell_type": "code",
   "source": [
    "misclassified = np.where(y_pred != y_test)[0]  # 获取错误分类的索引\n",
    "fig, axes = plt.subplots(2, 5, figsize=(10, 5))\n",
    "for i, ax in enumerate(axes.flat):\n",
    "    idx = misclassified[i]\n",
    "    ax.imshow(X_test[idx].reshape(28, 28), cmap='gray')\n",
    "    ax.set_title(f\"Pred: {y_pred[idx]}\\nTrue: {y_test[idx]}\")\n",
    "    ax.axis(\"off\")\n",
    "plt.show()"
   ],
   "id": "59b3a3e635d89c87",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x500 with 10 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 8
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "",
   "id": "a1f56ffca36f4151"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
